νμ₯ κ°λ₯νκ³ μ μ§ κ΄λ¦¬ κ°λ₯ν μΉ μ ν리μΌμ΄μ μ μν μλΉμ€ λ©μ λ° λΌμ°ν μ λ΅μ κ°μΆ νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄μ μν€ν μ², μ΄μ λ° κ΅¬νμ μ΄ν΄λ³΄μμμ€.
νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄: μ΅μ μΉ μ ν리μΌμ΄μ μ μν μλΉμ€ λ©μ λ° λΌμ°ν
μ€λλ μ 볡μ‘ν μΉ μ ν리μΌμ΄μ νκ²½μμ μ μ μλ μν€ν μ²λ νμ₯μ±, μ μ§ κ΄λ¦¬μ± λ° λ³΄μμ λ§€μ° μ€μν©λλ€. μ΄ μν€ν μ²μ ν΅μ¬ κ΅¬μ± μμ μ€ νλλ νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄(Backend for Frontend λλ BFFλΌκ³ λ ν¨)μ λλ€. μ΄ λΈλ‘κ·Έ κ²μλ¬Όμμλ νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄μ κ°λ μ μμΈν μ΄ν΄λ³΄κ³ μλΉμ€ λ©μμμμ μν κ³Ό λ€μν λΌμ°ν μ λ΅μ μ΄ν΄λ΄ λλ€.
νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ 무μμ λκΉ?
νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ ν΄λΌμ΄μΈνΈ μ ν리μΌμ΄μ (μ: μΉ λΈλΌμ°μ , λͺ¨λ°μΌ μ±)μ΄ μ¬λ¬ λ°±μλ μλΉμ€μ μνΈ μμ©νκΈ° μν 리λ²μ€ νλ‘μ λ° λ¨μΌ μ§μ μ μν μ ν©λλ€. νλ‘ νΈμλλ₯Ό λ°±μλ μν€ν μ²μ 볡μ‘μ±μΌλ‘λΆν° λΆλ¦¬νμ¬ κ°λ°μ λ¨μννκ³ μ¬μ©μ κ²½νμ ν₯μμν΅λλ€.
νλ‘ νΈμλ μ ν리μΌμ΄μ μ΄ μ¬λ¬ λ°±μλ μλΉμ€λ₯Ό μ§μ νΈμΆνλ λμ API κ²μ΄νΈμ¨μ΄μ λ¨μΌ μμ²μ 보λ λλ€. κ·Έλ° λ€μ κ²μ΄νΈμ¨μ΄λ μμ²μ μ μ ν λ°±μλ μλΉμ€λ‘ λΌμ°ν νκ³ νμν κ²½μ° μλ΅μ μ§κ³νμ¬ ν΅ν©λ μλ΅μ ν΄λΌμ΄μΈνΈμ λ°νν©λλ€.
νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄μ μ£Όμ μ± μ:
- μμ² λΌμ°ν : μ¬μ μ μλ κ·μΉμ λ°λΌ λ€μ΄μ€λ μμ²μ μ μ ν λ°±μλ μλΉμ€λ‘ μ λ¬ν©λλ€.
- μμ² λ³ν: λ°±μλ μλΉμ€μ νΈνλλλ‘ μμ² νμμ μμ ν©λλ€.
- μλ΅ μ§κ³: μ¬λ¬ λ°±μλ μλΉμ€μ μλ΅μ ν΄λΌμ΄μΈνΈμ λν λ¨μΌ μλ΅μΌλ‘ κ²°ν©ν©λλ€.
- μΈμ¦ λ° κΆν λΆμ¬: μ¬μ©μμ IDλ₯Ό νμΈνκ³ μμ²λ 리μμ€μ μ‘μΈμ€νλ λ° νμν κΆνμ΄ μλμ§ νμΈν©λλ€.
- μλ μ ν λ° μ€λ‘νλ§: λ¨μΌ ν΄λΌμ΄μΈνΈ λλ IP μ£Όμμμ μ€λ μμ² μλ₯Ό μ ννμ¬ λ°±μλ μλΉμ€κ° κ³ΌλΆνλλ κ²μ λ°©μ§ν©λλ€.
- μΊμ±: μμ£Ό μ‘μΈμ€νλ λ°μ΄ν°λ₯Ό μ μ₯νμ¬ λκΈ° μκ°μ μ€μ΄κ³ μ±λ₯μ ν₯μμν΅λλ€.
- κ΄μ°° κ°λ₯μ±: μμ€ν μ μν λ° μ±λ₯μ λͺ¨λν°λ§νκΈ° μν λ©νΈλ¦, λ‘κ·Έ λ° μΆμ μ μ 곡ν©λλ€.
- νλ‘ν μ½ λ³ν: μλ‘ λ€λ₯Έ νλ‘ν μ½ κ°μ λ³νν©λλ€(μ: HTTP/1.1μμ HTTP/2, RESTμμ gRPC).
- 보μ: CORS, SSL μ’ λ£ λ° μ λ ₯ μ ν¨μ± κ²μ¬μ κ°μ 보μ μ μ± μ ꡬνν©λλ€.
μλΉμ€ λ©μμ μν
μλΉμ€ λ©μ(service mesh)λ λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ² λ΄μμ μλΉμ€ κ° ν΅μ μ κ΄λ¦¬νλ μΈνλΌ κ³μΈ΅μ λλ€. μ ν리μΌμ΄μ μ½λλ₯Ό λ³κ²½νμ§ μκ³ λ νΈλν½ κ΄λ¦¬, κ΄μ°° κ°λ₯μ± λ° λ³΄μκ³Ό κ°μ κΈ°λ₯μ μ 곡ν©λλ€.νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄κ° ν΄λΌμ΄μΈνΈ μ ν리μΌμ΄μ κ³Ό λ°±μλ κ°μ ν΅μ μ μ²λ¦¬νλ λ°λ©΄, μλΉμ€ λ©μλ λ§μ΄ν¬λ‘μλΉμ€ *κ°*μ λ΄λΆ ν΅μ μ μ€μ μ λ‘λλ€. μ΄λ€μ ν¨κ» μλνμ¬ νΈλν½μ κ΄λ¦¬νκ³ μ 체 μμ€ν μ μμ μ±μ 보μ₯νκΈ° μν ν¬κ΄μ μΈ μ루μ μ μ 곡ν©λλ€.
μλΉμ€ λ©μκ° νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ₯Ό 보μνλ λ°©λ²:
- ν₯μλ κ΄μ°° κ°λ₯μ±: μλΉμ€ λ©μλ λͺ¨λ μλΉμ€ κ° ν΅μ μ λν μμΈν λ©νΈλ¦ λ° μΆμ λ°μ΄ν°λ₯Ό μ 곡νλ―λ‘ μ±λ₯ λ³λͺ© νμμ μλ³νκ³ λ¬Έμ λ₯Ό λ μ½κ² ν΄κ²°ν μ μμ΅λλ€. νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ ν΄λΌμ΄μΈνΈ μΈ‘ μ±λ₯ λ° μμ² ν¨ν΄μ λν ν΅μ°°λ ₯μ μ 곡ν©λλ€.
- ν₯μλ 보μ: μλΉμ€ λ©μλ μλΉμ€ μμ€μμ μνΈ TLS λ° μ‘μΈμ€ μ μ΄μ κ°μ 보μ μ μ± μ μ μ©νμ¬ μμ€ν μ μ λ°μ μΈ λ³΄μμ λμ± κ°νν μ μμ΅λλ€. νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ μμ§μμ μΈμ¦ λ° κΆν λΆμ¬λ₯Ό μ²λ¦¬ν©λλ€.
- κ³ κΈ νΈλν½ κ΄λ¦¬: μλΉμ€ λ©μλ μΉ΄λ리 λ°°ν¬, λΈλ£¨-κ·Έλ¦° λ°°ν¬ λ° A/B ν μ€νΈμ κ°μ κ³ κΈ νΈλν½ κ΄λ¦¬ κΈ°μ μ ꡬνν μ μμ΅λλ€. νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ μ¬μ©μ μμ± λλ μ§λ¦¬μ μμΉμ λ°λΌ μ ν리μΌμ΄μ μ λ€λ₯Έ λ²μ μΌλ‘ νΈλν½μ λΌμ°ν ν μ μμ΅λλ€.
- 볡μλ ₯: μλΉμ€ λ©μλ μ¬μλ, νλ‘ μ°¨λ¨κΈ° λ° λ‘λ λ°Έλ°μ±κ³Ό κ°μ κΈ°λ₯μ μ 곡νμ¬ μμ€ν μ 볡μλ ₯μ ν₯μμν΅λλ€. νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ λ°±μλ μλΉμ€μ μ€λ₯λ₯Ό μ²λ¦¬νκΈ° μν ν΄λ°± λ©μ»€λμ¦μ ꡬνν μ μμ΅λλ€.
μΌλ°μ μΈ μλΉμ€ λ©μ κΈ°μ λ‘λ Istio, Linkerd λ° Consul Connectκ° μμ΅λλ€.
νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄μ λΌμ°ν μ λ΅
μ¬λ°λ₯Έ λΌμ°ν μ λ΅μ μ ννλ κ²μ μ±λ₯, 보μ λ° μ μ§ κ΄λ¦¬μ±μ μ΅μ ννλ λ° λ§€μ° μ€μν©λλ€. λ€μμ νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄μμ μ¬μ©λλ λͺ κ°μ§ μΌλ°μ μΈ λΌμ°ν μ λ΅μ λλ€.
1. κ²½λ‘ κΈ°λ° λΌμ°ν
μ΄κ²μ μμ²μ΄ URL κ²½λ‘λ₯Ό κΈ°λ°μΌλ‘ λΌμ°ν λλ κ°μ₯ κ°λ¨ν λΌμ°ν μ λ΅μ λλ€. μλ₯Ό λ€μ΄:
/users-> μ¬μ©μ μλΉμ€/products-> μ ν μλΉμ€/orders-> μ£Όλ¬Έ μλΉμ€
κ²½λ‘ κΈ°λ° λΌμ°ν μ ꡬννκ³ μ΄ν΄νκΈ° μ½μ§λ§ URL κ΅¬μ‘°κ° μ μ μλμ§ μμκ±°λ κ²ΉμΉλ κ²½λ‘κ° μλ κ²½μ° λ³΅μ‘ν΄μ§ μ μμ΅λλ€.
2. ν€λ κΈ°λ° λΌμ°ν
μ΄ μ λ΅μ HTTP ν€λ κ°μ κΈ°λ°μΌλ‘ μμ²μ λΌμ°ν ν©λλ€. μ΄λ μ¬μ©μμ μ₯μΉ μ ν, μΈμ΄ λλ μΈμ¦ μνλ₯Ό κΈ°λ°μΌλ‘ μμ²μ λΌμ°ν νλ λ° μ μ©ν μ μμ΅λλ€. μλ₯Ό λ€μ΄ `Accept-Language` ν€λλ₯Ό μ¬μ©νμ¬ μ ν리μΌμ΄μ μ νμ§νλ λ²μ μΌλ‘ μμ²μ λΌμ°ν ν μ μμ΅λλ€.
μ:
μμ² ν€λ `X-Region: EU`κ° μλ κ²½μ° μμ²μ μ λ½ λ°μ΄ν° μΌν°λ‘ λΌμ°ν λ©λλ€. `X-Region: US`κ° μλ κ²½μ° λ―Έκ΅ λ°μ΄ν° μΌν°λ‘ λΌμ°ν λ©λλ€. μ΄λ₯Ό ν΅ν΄ λ°μ΄ν° μ£ΌκΆ κ·μ μ€μκ° κ°λ₯ν©λλ€.
3. 쿼리 λ§€κ°λ³μ κΈ°λ° λΌμ°ν
μ΄ μ λ΅μ URLμ 쿼리 λ§€κ°λ³μ κ°μ κΈ°λ°μΌλ‘ μμ²μ λΌμ°ν ν©λλ€. μ΄λ μ ν리μΌμ΄μ μ νΉμ κΈ°λ₯ λλ μ€νμ λ²μ μ κΈ°λ°μΌλ‘ μμ²μ λΌμ°ν νλ λ° μ μ©ν μ μμ΅λλ€.
μ:
κ²μ νλ«νΌμμ μ΄λ₯Ό μ¬μ©ν μ μμ΅λλ€. URL `https://example.com/game?version=beta`λ μ¬μ©μλ₯Ό κ²μμ λ² ν ν μ€νΈ μλ²λ‘ μλ΄ν μ μμΌλ©°, `https://example.com/game?version=stable`μ νλ‘λμ νκ²½μΌλ‘ μ°κ²°λ©λλ€.
4. λ©μλ κΈ°λ° λΌμ°ν
μ΄ μ λ΅μ HTTP λ©μλ(μ: GET, POST, PUT, DELETE)λ₯Ό κΈ°λ°μΌλ‘ μμ²μ λΌμ°ν ν©λλ€. μ΄λ μΌλ°μ μΌλ‘ RESTful APIμμ λ€λ₯Έ λ©μλλ₯Ό λ€λ₯Έ λ°±μλ μλΉμ€ λλ μμ μ λ§€ννλ λ° μ¬μ©λ©λλ€.
5. μ½ν μΈ κΈ°λ° λΌμ°ν
μ΄ μ λ΅μ μμ² λ³Έλ¬Έμ λ΄μ©μ κΈ°λ°μΌλ‘ μμ²μ λΌμ°ν ν©λλ€. μ΄λ λ°μ΄ν° νμ(μ: JSON, XML) λλ μμ² μ ν(μ: μ¬μ©μ μμ±, μ ν μ λ°μ΄νΈ)μ κΈ°λ°μΌλ‘ μμ²μ λΌμ°ν νλ λ° μ μ©ν μ μμ΅λλ€. μ΄λ μΌλ°μ μΌλ‘ λ 볡μ‘ν ꡬ문 λΆμμ ν¬ν¨νλ©° λκΈ° μκ°μ μ λ°ν μ μμ΅λλ€.
μ:
μ μ μκ±°λ νλ«νΌμ μ₯λ°κ΅¬λ νμ΄λ‘λκ° ν¬ν¨λ μμ²μ 'κ²°μ ' μλΉμ€λ‘ λΌμ°ν νκ³ μ ν μΈλΆ μ λ³΄κ° ν¬ν¨λ μμ²μ 'μ ν μ 보' μλΉμ€λ‘ λΌμ°ν ν μ μμ΅λλ€.
6. κ°μ€ λΌμ°ν
κ°μ€ λΌμ°ν μ μ¬μ μ μλ κ°μ€μΉλ₯Ό κΈ°λ°μΌλ‘ μ¬λ¬ λ°±μλ μλΉμ€μ νΈλν½μ λΆμ°νλ λ° μ¬μ©λ©λλ€. μ΄λ μΌλ°μ μΌλ‘ μΉ΄λ리 λ°°ν¬ λλ A/B ν μ€νΈμ μ¬μ©λλ©°, μ ν리μΌμ΄μ μ μ λ²μ μ μμμ μ¬μ©μμκ² μ μ§μ μΌλ‘ λ°°ν¬νλ €λ κ²½μ°μ μ¬μ©λ©λλ€.
μ:
μ ν리μΌμ΄μ μ κΈ°μ‘΄ λ²μ μ 90%μ νΈλν½μ λΌμ°ν νκ³ μ λ²μ μ 10%λ₯Ό λΌμ°ν ν μ μμ΅λλ€. μ λ²μ μ μ±λ₯μ λͺ¨λν°λ§νλ©΄μ λͺ¨λ νΈλν½μ μ²λ¦¬ν λκΉμ§ κ°μ€μΉλ₯Ό μ μ§μ μΌλ‘ λ릴 μ μμ΅λλ€.
7. μ§λ¦¬μ λΌμ°ν (Geo-Routing)
μ΄ λ°©λ²μ ν΄λΌμ΄μΈνΈμ μ§λ¦¬μ μμΉ(IP μ£Όμ λλ κΈ°ν μλ¨μμ νμλ¨)λ₯Ό μ¬μ©νμ¬ μμ²μ κ°μ₯ κ°κΉμ΄ λλ κ°μ₯ μ μ ν λ°±μλ μλΉμ€ μΈμ€ν΄μ€λ‘ λΌμ°ν ν©λλ€. μ΄λ κ² νλ©΄ λκΈ° μκ°μ΄ μ΅μνλκ³ λ€μν μ§μμ μ¬μ©μμ μ±λ₯μ΄ ν₯μλ©λλ€. μ΄λ μ μμ μΌλ‘ λΆμ°λ μ ν리μΌμ΄μ μ λ§€μ° μ€μν©λλ€.
μ:
μ€νΈλ¦¬λ° μλΉμ€λ μ λ½μ μ¬μ©μλ₯Ό μ λ½μ μλ μλ²λ‘ λΌμ°ν νκ³ λΆλ―Έμ μ¬μ©μλ₯Ό λΆλ―Έμ μλ μλ²λ‘ λΌμ°ν ν μ μμ΅λλ€.
8. μ¬μ©μ κΈ°λ° λΌμ°ν
λΌμ°ν κ²°μ μ μΈμ¦λ μ¬μ©μλ₯Ό κΈ°λ°μΌλ‘ ν©λλ€. λ€λ₯Έ μ¬μ©μ κ·Έλ£Ήμ μ ν리μΌμ΄μ μ λ€λ₯Έ κΈ°λ₯ λλ λ²μ μ μ‘μΈμ€ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ κ°μΈνλ κ²½νκ³Ό μ μ΄λ κΈ°λ₯ λ‘€μμμ΄ κ°λ₯ν©λλ€.
μ:
ν리미μ κ°μ μμκ²λ λκΈ° μκ°μ΄ μ§§μ μλ²λ‘ λΌμ°ν ν μ μκ³ , λ¬΄λ£ μ¬μ©μλ νμ€ μΈνλΌλ‘ μ°κ²°ν μ μμ΅λλ€.
νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄ μ¬μ©μ μ΄μ
νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ₯Ό ꡬννλ©΄ λ€μκ³Ό κ°μ λͺ κ°μ§ μ€μν μ΄μ μ΄ μμ΅λλ€.
- ν₯μλ μ±λ₯: API κ²μ΄νΈμ¨μ΄λ μμ²μ μ§κ³νκ³ λ°μ΄ν°λ₯Ό μΊμ±νμ¬ λ°±μλ μλΉμ€μ λν μμ² μλ₯Ό μ€μ¬ μ λ°μ μΈ μ±λ₯μ ν₯μμν€κ³ λκΈ° μκ°μ μ€μΌ μ μμ΅λλ€.
- λ¨μνλ νλ‘ νΈμλ κ°λ°: API κ²μ΄νΈμ¨μ΄λ νλ‘ νΈμλλ₯Ό λ°±μλμμ λΆλ¦¬νμ¬ νλ‘ νΈμλ κ°λ°μκ° λ°±μλ μν€ν μ²μ 볡μ‘μ±μ λν΄ κ±±μ νμ§ μκ³ μ¬μ©μ μΈν°νμ΄μ€ ꡬμΆμ μ§μ€ν μ μλλ‘ ν©λλ€.
- ν₯μλ 보μ: API κ²μ΄νΈμ¨μ΄λ μΈμ¦, κΆν λΆμ¬ λ° μλ μ νκ³Ό κ°μ 보μ μ μ± μ μ μ©νμ¬ λ°±μλ μλΉμ€λ₯Ό μ μ± κ³΅κ²©μΌλ‘λΆν° 보νΈν μ μμ΅λλ€.
- νμ₯μ± ν₯μ: API κ²μ΄νΈμ¨μ΄λ μ¬λ¬ λ°±μλ μλΉμ€μ νΈλν½μ λΆμ°νμ¬ μμ€ν μ΄ μ¦κ°λ λΆνλ₯Ό μ²λ¦¬νκΈ° μν΄ λ μ½κ² νμ₯ν μ μλλ‘ ν©λλ€.
- μ€μ μ§μ€μ API κ΄λ¦¬: API κ²μ΄νΈμ¨μ΄λ APIλ₯Ό κ΄λ¦¬νκ³ λͺ¨λν°λ§νκΈ° μν μ€μ μ§μ μ μ 곡νμ¬ μ¬μ©λμ μΆμ νκ³ λ¬Έμ λ₯Ό μλ³νκ³ μ μ± μ μ μ©νλ κ²μ λ μ½κ² λ§λλλ€.
- κΈ°μ μ ꡬμ λ°μ§ μλ νλ‘ νΈμλ: νλ‘ νΈμλ νμ λ°±μλμ λν΄ κ±±μ ν νμκ° μμΌλ―λ‘ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό ꡬμΆνκΈ° μν΄ μλ‘μ΄ κΈ°μ μ μ ννλ λ° ν¨μ¬ λ μ μ°ν΄μ§λλ€.
μ¬λ°λ₯Έ κΈ°μ μ ν
νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ₯Ό ꡬννλ λ° μ¬μ©ν μ μλ μ¬λ¬ κΈ°μ μ΄ μμΌλ©° κ° κΈ°μ μλ κ³ μ ν κ°μ κ³Ό μ½μ μ΄ μμ΅λλ€. λͺ κ°μ§ μΈκΈ° μλ μ΅μ μ λ€μκ³Ό κ°μ΅λλ€.
- NGINX: API κ²μ΄νΈμ¨μ΄λ‘ ꡬμ±ν μ μλ κ³ μ±λ₯ μΉ μλ² λ° λ¦¬λ²μ€ νλ‘μμ λλ€.
- HAProxy: λ λ€λ₯Έ μΈκΈ° μλ μ€ν μμ€ λ‘λ λ°Έλ°μ λ° λ¦¬λ²μ€ νλ‘μμ λλ€.
- Kong: NGINXλ₯Ό κΈ°λ°μΌλ‘ ꡬμΆλ μ€ν μμ€ API κ²μ΄νΈμ¨μ΄μ λλ€.
- Tyk: κΈ°λ³Έ μ 곡 API κ΄λ¦¬ κΈ°λ₯μ΄ μλ μ€ν μμ€ API κ²μ΄νΈμ¨μ΄μ λλ€.
- API κ΄λ¦¬ νλ«νΌ(μ: Apigee, Mulesoft): APIλ₯Ό κ΄λ¦¬νκ³ λ³΄νΈνκΈ° μν ν¬κ΄μ μΈ κΈ°λ₯ μΈνΈλ₯Ό μ 곡νλ μμ© νλ«νΌμ λλ€. μ¬κΈ°μλ μΌλ°μ μΌλ‘ API λΆμ, κ°λ°μ ν¬νΈ λ° μμ΅ μ°½μΆ κΈ°λ₯μ΄ ν¬ν¨λ©λλ€.
- ν΄λΌμ°λ 곡κΈμ μ루μ (μ: AWS API Gateway, Azure API Management, Google Cloud API Gateway): μ£Όμ ν΄λΌμ°λ 곡κΈμκ° μ 곡νλ ν΄λΌμ°λ κΈ°λ° API κ²μ΄νΈμ¨μ΄ μλΉμ€μ λλ€. μ΄λ¬ν μλΉμ€λ ν΄λΌμ°λ 곡κΈμμ μμ½μμ€ν κ³Ό κΈ΄λ°νκ² ν΅ν©λμ΄ μμΌλ©° νμ₯μ±, 보μ λ° μ¬μ© νΈμμ±μ μ 곡ν©λλ€.
- GraphQL κ²μ΄νΈμ¨μ΄(μ: Apollo Gateway, StepZen): μ€ν€λ§ κ΅¬μ± λ° νλλ μ΄μ κ³Ό κ°μ κΈ°λ₯μ μ 곡νλ GraphQL APIμ©μΌλ‘ μ€κ³λ μ λ¬Έ κ²μ΄νΈμ¨μ΄μ λλ€.
κΈ°μ μ μ νν λλ μ±λ₯, νμ₯μ±, 보μ, μ¬μ© νΈμμ± λ° λΉμ©κ³Ό κ°μ μμλ₯Ό κ³ λ €νμμμ€. κΈ°μ‘΄ μΈνλΌ λ° μ λ¬Έμ±λ κ³ λ €ν΄μΌ ν©λλ€. μ΄λ―Έ λ€λ₯Έ μ©λλ‘ NGINXλ₯Ό μ¬μ©νκ³ μλ κ²½μ° API κ²μ΄νΈμ¨μ΄λ‘ μ¬μ©νλ κ²μ΄ μ’μ μ νμΌ μ μμ΅λλ€. λ κ³ κΈ API κ΄λ¦¬ κΈ°λ₯μ΄ νμν κ²½μ° μμ© API κ΄λ¦¬ νλ«νΌμ΄ λ λμ μ΅μ μΌ μ μμ΅λλ€.
ꡬν κ³ λ € μ¬ν
νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ₯Ό ꡬννλ €λ©΄ μ μ€ν κ³νκ³Ό μ€νμ΄ νμν©λλ€. λ€μμ λͺ κ°μ§ μ€μν κ³ λ € μ¬νμ λλ€.
- API μ€κ³: νλ‘ νΈμλλ₯Ό μΌλμ λκ³ APIλ₯Ό μ€κ³νμμμ€. ν΄λΌμ΄μΈνΈ μ ν리μΌμ΄μ μ μꡬ μ¬νμ κ³ λ €νκ³ μ¬μ©νκΈ° μ½κ³ ν¨μ¨μ μΈ APIλ₯Ό μ€κ³νμμμ€.
- μΈμ¦ λ° κΆν λΆμ¬: λ¬΄λ¨ μ‘μΈμ€λ‘λΆν° λ°±μλ μλΉμ€λ₯Ό 보νΈνκΈ° μν΄ κ°λ ₯ν μΈμ¦ λ° κΆν λΆμ¬ λ©μ»€λμ¦μ ꡬννμμμ€. OAuth 2.0 λ° OpenID Connectμ κ°μ μ κ³ νμ€ νλ‘ν μ½μ μ¬μ©νλ κ²μ κ³ λ €νμμμ€.
- μ€λ₯ μ²λ¦¬: ν΄λΌμ΄μΈνΈ μ ν리μΌμ΄μ μ μ μ΅ν μ€λ₯ λ©μμ§λ₯Ό μ 곡νκΈ° μν΄ μ μ ν μ€λ₯ μ²λ¦¬λ₯Ό ꡬννμμμ€. κ°λ°μκ° λ¬Έμ λ₯Ό λ μ½κ² λλ²κ·Έν μ μλλ‘ μΌκ΄λ μ€λ₯ μ½λμ λ©μμ§λ₯Ό μ¬μ©νμμμ€.
- λͺ¨λν°λ§ λ° λ‘κΉ : API κ²μ΄νΈμ¨μ΄ λ° λ°±μλ μλΉμ€μ μν λ° μ±λ₯μ μΆμ νκΈ° μν΄ ν¬κ΄μ μΈ λͺ¨λν°λ§ λ° λ‘κΉ μ ꡬννμμμ€. Prometheus, Grafana λ° ELK μ€νκ³Ό κ°μ λꡬλ₯Ό μ¬μ©νμ¬ λ©νΈλ¦ λ° λ‘κ·Έλ₯Ό μμ§νκ³ λΆμνμμμ€.
- μλ μ ν λ° μ€λ‘νλ§: λ°±μλ μλΉμ€κ° κ³ΌλΆνλλ κ²μ λ°©μ§νκΈ° μν΄ μλ μ ν λ° μ€λ‘νλ§μ ꡬννμμμ€. λ°±μλ μλΉμ€μ μ©λκ³Ό μμ νΈλν½ ν¨ν΄μ κΈ°λ°μΌλ‘ μ μ ν μ νμ μ μνμμμ€.
- μΊμ±: λκΈ° μκ°μ μ€μ΄κ³ μ±λ₯μ ν₯μμν€κΈ° μν΄ μΊμ±μ ꡬννμμμ€. μ½ν μΈ κΈ°λ° μΊμ± λλ μκ° κΈ°λ° μΊμ±κ³Ό κ°μ΄ μ ν리μΌμ΄μ μ μ ν©ν μΊμ± μ λ΅μ μ¬μ©νμμμ€.
- ν μ€νΈ: API κ²μ΄νΈμ¨μ΄ λ° λ°±μλ μλΉμ€κ° μ¬λ°λ₯΄κ² μλνλμ§ νμΈνκΈ° μν΄ μ² μ ν ν μ€νΈνμμμ€. μλνλ ν μ€νΈ λꡬλ₯Ό μ¬μ©νμ¬ λ¨μ ν μ€νΈ, ν΅ν© ν μ€νΈ λ° μλ ν¬ μλ ν μ€νΈλ₯Ό μ€ννμμμ€.
- μ€λͺ μ: APIμ λν λͺ ννκ³ ν¬κ΄μ μΈ μ€λͺ μλ₯Ό μμ±νμμμ€. Swagger/OpenAPIμ κ°μ λꡬλ₯Ό μ¬μ©νμ¬ API μ€λͺ μλ₯Ό μλμΌλ‘ μμ±νμμμ€. μ€λͺ μλ API μλν¬μΈνΈ, μμ² λ§€κ°λ³μ, μλ΅ νμ λ° μ€λ₯ μ½λλ₯Ό λͺ ννκ² μ€λͺ ν΄μΌ ν©λλ€.
- 보μ κ°ν: API κ²μ΄νΈμ¨μ΄ λ° λ°±μλ μλΉμ€μ 보μ ꡬμ±μ μ κΈ°μ μΌλ‘ κ²ν νκ³ μ λ°μ΄νΈνμμμ€. 보μ ν¨μΉλ₯Ό μ¦μ μ μ©νκ³ λ³΄μ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄μμμ€.
μ€μ μ¬λ‘
- μ μ μκ±°λ νλ«νΌ: λκ·λͺ¨ μ μ μκ±°λ νλ«νΌμ νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ₯Ό μ¬μ©νμ¬ μ ν μΉ΄νλ‘κ·Έ, μ£Όλ¬Έ κ΄λ¦¬ λ° κ²°μ μ²λ¦¬μ κ°μ λ€μν λ°±μλ μλΉμ€μ λ°μ΄ν°λ₯Ό μ§κ³ν©λλ€. κ²μ΄νΈμ¨μ΄λ λν μΈμ¦ λ° κΆν λΆμ¬λ₯Ό μ²λ¦¬νμ¬ κ³ κ° λ°μ΄ν°μ λν 보μ μ‘μΈμ€λ₯Ό 보μ₯ν©λλ€.
- λ―Έλμ΄ μ€νΈλ¦¬λ° μλΉμ€: λ―Έλμ΄ μ€νΈλ¦¬λ° μλΉμ€λ νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ₯Ό μ¬μ©νμ¬ μ¬μ©μμ μμΉμ λ°λΌ λ€λ₯Έ μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN)λ‘ μμ²μ λΌμ°ν ν©λλ€. κ²μ΄νΈμ¨μ΄λ λν νΈλμ€μ½λ© λ° μ½ν μΈ μ΅μ νλ₯Ό μ²λ¦¬νμ¬ λ€μν μ₯μΉμ μ¬μ©μλ₯Ό μν μνν μ€νΈλ¦¬λ° κ²½νμ 보μ₯ν©λλ€.
- κΈμ΅ κΈ°κ΄: κΈμ΅ κΈ°κ΄μ νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ₯Ό μ¬μ©νμ¬ λͺ¨λ°μΌ λ± νΉ μ ν리μΌμ΄μ μ APIλ₯Ό λ ΈμΆν©λλ€. κ²μ΄νΈμ¨μ΄λ μΈμ¦, κΆν λΆμ¬ λ° λ°μ΄ν° μνΈνλ₯Ό μ²λ¦¬νμ¬ μ€μν κΈμ΅ λ°μ΄ν°μ 보μμ 보μ₯ν©λλ€.
- κΈλ‘λ² μμ λ―Έλμ΄ λ€νΈμν¬: κΈλ‘λ² μμ λ―Έλμ΄ λ€νΈμν¬λ νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ₯Ό ν΅ν΄ μ§λ¦¬μ λΌμ°ν μ μ¬μ©νμ¬ μ¬μ©μλ₯Ό κ°μ₯ κ°κΉμ΄ λ°μ΄ν° μΌν°λ‘ μλ΄νμ¬ νΉν μ΄λ―Έμ§ λ° λΉλμ€ μ λ‘λμμ λκΈ° μκ°μ μ€μ΄κ³ μ¬μ©μ κ²½νμ κ°μ ν©λλ€.
λ―Έλ λν₯
- μλ²λ¦¬μ€ API κ²μ΄νΈμ¨μ΄: μλ²λ¦¬μ€ μ»΄ν¨ν μ λΆμμΌλ‘ μΈνλΌ κ΄λ¦¬ μμ΄ API νΈλν½μ μλμΌλ‘ νμ₯νκ³ κ΄λ¦¬ν μ μλ μλ²λ¦¬μ€ API κ²μ΄νΈμ¨μ΄ κ°λ°μ΄ μ΄μ΄μ§κ³ μμ΅λλ€. μλ‘λ API κ²μ΄νΈμ¨μ΄μ ν΅ν©λ AWS Lambda κΈ°λ₯μ΄ μμ΅λλ€.
- GraphQL νλλ μ΄μ : GraphQL νλλ μ΄μ μ ν΅ν΄ μ¬λ¬ GraphQL APIλ₯Ό λ¨μΌ ν΅ν© APIλ‘ κ²°ν©ν μ μμ΅λλ€. μ΄λ κ² νλ©΄ νλ‘ νΈμλ κ°λ°μ λ¨μννκ³ λ°±μλ μλΉμ€μ λν μμ² μλ₯Ό μ€μ¬ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€. Apollo Federationκ³Ό κ°μ μ루μ μ΄ μ μ λ λμ€νλκ³ μμ΅λλ€.
- AI κΈ°λ° API κ²μ΄νΈμ¨μ΄: μΈκ³΅ μ§λ₯(AI)μ μ΄μ κ°μ§, μν κ°μ§ λ° μ±λ₯ μ΅μ νμ κ°μ API κ²μ΄νΈμ¨μ΄ κΈ°λ₯μ ν₯μμν€λ λ° μ¬μ©λκ³ μμ΅λλ€. AI κΈ°λ° API κ²μ΄νΈμ¨μ΄λ 보μ μνμ μλμΌλ‘ μλ³νκ³ μννλ©° μ€μκ° νΈλν½ ν¨ν΄μ κΈ°λ°μΌλ‘ API μ±λ₯μ μ΅μ νν μ μμ΅λλ€.
- κ²μ΄νΈμ¨μ΄μ WebAssembly(Wasm): WebAssemblyλ₯Ό μ¬μ©νλ©΄ μμ§μμ κ³ μ±λ₯ μ½λλ₯Ό μ€νν μ μμΌλ―λ‘ μ¬μ©μ μ§μ μμ² λ³ν λ° λ³΄μ μ μ± κ³Ό κ°μ κ³ κΈ κΈ°λ₯μ μλΉν μ±λ₯ μ€λ²ν€λ μμ΄ API κ²μ΄νΈμ¨μ΄μμ μ§μ ꡬνν μ μμ΅λλ€.
κ²°λ‘
νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ ν΄λΌμ΄μΈνΈ μ ν리μΌμ΄μ μ΄ λ°±μλ μλΉμ€μ μνΈ μμ©νκΈ° μν λ¨μΌ μ§μ μ μ μ 곡νλ μ΅μ μΉ μ ν리μΌμ΄μ μν€ν μ²μ μ€μν κ΅¬μ± μμμ λλ€. μ μ ν λΌμ°ν μ λ΅, 보μ μ μ± λ° μΊμ± λ©μ»€λμ¦μ ꡬννμ¬ μ ν리μΌμ΄μ μ μ±λ₯, νμ₯μ± λ° λ³΄μμ ν¬κ² ν₯μμν¬ μ μμ΅λλ€. νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ₯Ό μλΉμ€ λ©μμ ν΅ν©νλ©΄ κ΄μ°° κ°λ₯μ±κ³Ό 볡μλ ₯μ΄ λμ± ν₯μλ©λλ€.νΉμ μꡬ μ¬νμ μ μ€νκ² κ³ λ €νκ³ μ¬λ°λ₯Έ κΈ°μ μ μ ννλ©΄ κ°λ°μ λ¨μννκ³ μ¬μ©μ κ²½νμ κ°μ νλ©° λ°±μλ μλΉμ€λ₯Ό 보νΈνλ κ°λ ₯νκ³ νμ₯ κ°λ₯ν νλ‘ νΈμλ API κ²μ΄νΈμ¨μ΄λ₯Ό ꡬμΆν μ μμ΅λλ€.